package de.mnit.schnipsel.db;

import de.mnit.basis.daten.FormatZahl;
import de.mnit.basis.db.konstant.DBMS;
import de.mnit.basis.db.zugang.DBZugang;
import de.mnit.basis.db.zugang.S_DBZugang;
import de.mnit.basis.fehler.Fehler;
import de.mnit.basis.fehler.system.F_Sys_Datei;
import de.mnit.basis.fehler.system.F_Sys_InOut;
import de.mnit.basis.swt.dialog.SWT_Fehler;
import de.mnit.basis.sys.Ausgabe;
import de.mnit.basis.sys.datei.konfig.KonfigDatei;
import de.mnit.schnipsel.zentral.SC_DateiSys;

/**
 * @author Michael Nitsche
 * 01.07.2010	Erstellt
 */
public class DBKonfig {

	private final KonfigDatei konfig;


	public DBKonfig() throws F_Sys_Datei {
		this.konfig=new KonfigDatei("Datenbanken", SC_DateiSys.gOrdnerDB().dF("dbs", "properties"));

		try {
			this.konfig.lesen();
		}
		catch(F_Sys_InOut e) {
			Fehler.zeig(e, false);
			try {
				iSetze(1, DBMS.HSQLDB, "","sa","",SC_DateiSys.gOrdnerDB().dF("db").gPfadKomplett()); //Standard-Konfig setzen!
			}
			catch(F_Sys_InOut e1) {
				SWT_Fehler.zeig(e1, true);
			}
		}
	}


	public int gAnzahl() {
		return 1;
	}

	public void setze(int nr, S_DBZugang z) throws F_Sys_InOut {
		iSetze(nr, z.gDBMS(), z.gHost(), z.gUser(), z.gPass(), z.gDB());
	}

	public S_DBZugang gib(int nr) throws F_Sys_Datei {
		Fehler.zahl.wenn_Ausserhalb(1, gAnzahl(), nr);

		String zahl=FormatZahl.breite(2, nr)+".";
		String host=konfig.gStringStd(zahl+"host", "");
		String user=konfig.gStringStd(zahl+"user", "");
		String pass=konfig.gStringStd(zahl+"pass", "");
		String db  =konfig.gStringStd(zahl+"db", "");
		String typ =konfig.gStringStd(zahl+"typ", "");

		DBMS dbms=DBMS.HSQLDB;
		if(typ.toLowerCase().equals("mysql"))
			dbms=DBMS.MYSQL;

		if(dbms==DBMS.HSQLDB && user.length()==0)
			user="sa";

		return new DBZugang(dbms, host, db, user, pass);

//		if(nr==1)
//			return ZugangHSQLDB.neu(this.ordner.oF("db").dF("db"));
//		else
//			return ZugangMySQL.neu("localhost", "schnipsel", "schnipsel", "schnipsel1");
	}

	// INTERN

	private void iSetze(int nr, DBMS dbms, String host, String user, String pass, String db) throws F_Sys_InOut {
		Ausgabe.debug(db);
		String zahl=FormatZahl.breite(2, nr)+".";
		konfig.sString(zahl+"host", host);
		konfig.sString(zahl+"user", user);
		konfig.sString(zahl+"pass", pass);
		konfig.sString(zahl+"db", db);
		konfig.sString(zahl+"typ", dbms.name().toLowerCase());
		konfig.schreiben();
	}

}
